﻿#ifndef BARCODECREATOR_H
#define BARCODECREATOR_H

/**
 * @file BarcodeCreator.h
 * @author LiYuan
 * @email 18069211@qq.com
 * @version v1.0
 * @license GPL2.0
 * @brief 条码生成的一个框架
 * @details
 * @copyright 2015-2022
 */

#include <QSize>
#include <QString>
#include <QPainter>

class BarcodeCreator
{
public:
    BarcodeCreator();

    virtual QSize size() const = 0;
    virtual bool isValid() const = 0;

    virtual bool encodeString(QString str) = 0;
    virtual bool encodeString8Bit(QString str) = 0;

    /**
     * @brief renderNoBackground 用于将 DataMatrix 码画到界面上或者画到图像中。只画前景色部分，保留原始的背景。
     * @param painter
     * @param rect DataMatrix 码所在区域，可以不是正方形。但是最好是正方形。
     * @return
     */
    virtual bool renderNoBackground(QPainter &painter, QRect rect) const = 0;
    bool renderNoBackground(QPainter &painter, int width, int height) const;

    /**
     * @brief setColor 设置图像的前景色和背景色，通常为白底黑色码
     * @param foreground 前景色，通常为黑色
     * @param background 背景色，通常为白色
     */
    void setColor(QColor foreground = Qt::black, QColor background = Qt::white);

    /**
      * @brief render 用于将 Barcode 码画到界面上或者画到图像中。用 background 填充背景。
      * @param painter
      * @param background 背景颜色
      * @param foreground 前景颜色
      * @param rect Barcode 码所在区域
      * @return
      */
     bool render(QPainter &painter,
               QColor background,
               QColor foreground,
               QRect rect = QRect()) const;

     /**
      * @brief toImage 将 Barcode 码转化为一个图像。
      * @param size 图像的尺寸。
      * @return
      */
     QImage toImage(QSize size = QSize(0, 0), QImage::Format format = QImage::Format_ARGB32) const;

     /**
      * @brief saveImage 将 Barcode 码图像保存到文件中。
      * @param fileName 文件名，需要给出后缀。
      * @param size 图像尺寸。
      * @return
      */
     bool saveImage(QString fileName, QSize size = QSize(0, 0)) const;

protected:
     QColor m_background;
     QColor m_foreground;
};

#endif // BARCODECREATOR_H
